home *** CD-ROM | disk | FTP | other *** search
/ Freelog 125 / Freelog_MarsAvril2015_No125.iso / Musique / Quod Libet / quodlibet-3.3.0-installer.exe / bin / quodlibet / qltk / tracker.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2014-12-31  |  7KB  |  181 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.7)
  3.  
  4. import os
  5. import time
  6. from gi.repository import GObject, GLib
  7. from quodlibet import config
  8. from quodlibet import const
  9.  
  10. class TimeTracker(GObject.GObject):
  11.     '''Emits tick every second (with up to one second jitter) as long
  12.     as the player is activly playing.
  13.  
  14.     Uses timeout_add_seconds, so multiple instances of this should
  15.     sync and not produce more wakeups.
  16.     '''
  17.     __gsignals__ = {
  18.         'tick': (GObject.SignalFlags.RUN_LAST, None, ()) }
  19.     
  20.     def __init__(self, player):
  21.         super(TimeTracker, self).__init__()
  22.         self._TimeTracker__player = player
  23.         self._TimeTracker__id = None
  24.         self._TimeTracker__sigs = [
  25.             player.connect('paused', self._TimeTracker__paused),
  26.             player.connect('unpaused', self._TimeTracker__unpaused)]
  27.  
  28.     
  29.     def destroy(self):
  30.         for signal_id in self._TimeTracker__sigs:
  31.             self._TimeTracker__player.disconnect(signal_id)
  32.         
  33.         self._TimeTracker__source_remove()
  34.  
  35.     
  36.     def __source_remove(self):
  37.         if self._TimeTracker__id is not None:
  38.             GLib.source_remove(self._TimeTracker__id)
  39.             self._TimeTracker__id = None
  40.  
  41.     
  42.     def __update(self):
  43.         if self._TimeTracker__stop:
  44.             self._TimeTracker__source_remove()
  45.             return False
  46.         None.emit('tick')
  47.         return True
  48.  
  49.     
  50.     def __paused(self, *args):
  51.         self._TimeTracker__stop = True
  52.  
  53.     
  54.     def __unpaused(self, *args):
  55.         self._TimeTracker__stop = False
  56.         if self._TimeTracker__id is None:
  57.             self._TimeTracker__id = GLib.timeout_add_seconds(1, self._TimeTracker__update)
  58.  
  59.  
  60.  
  61. class SongTracker(object):
  62.     
  63.     def __init__(self, librarian, player, pl):
  64.         self._SongTracker__player_ids = [
  65.             player.connect('song-ended', self._SongTracker__end, librarian, pl),
  66.             player.connect('song-started', self._SongTracker__start, librarian)]
  67.         self._SongTracker__player = player
  68.         timer = TimeTracker(player)
  69.         timer.connect('tick', self._SongTracker__timer)
  70.         self.elapsed = 0
  71.         self._SongTracker__to_change = set()
  72.         self._SongTracker__change_id = None
  73.  
  74.     
  75.     def destroy(self):
  76.         for id_ in self._SongTracker__player_ids:
  77.             self._SongTracker__player.disconnect(id_)
  78.         
  79.         self._SongTracker__player = None
  80.         if self._SongTracker__change_id:
  81.             GLib.source_remove(self._SongTracker__change_id)
  82.             self._SongTracker__change_id = None
  83.  
  84.     
  85.     def __changed(self, librarian, song):
  86.         self._SongTracker__to_change.add(song)
  87.         if self._SongTracker__change_id is not None:
  88.             GLib.source_remove(self._SongTracker__change_id)
  89.             self._SongTracker__change_id = None
  90.         
  91.         def idle_change():
  92.             librarian.changed(list(self._SongTracker__to_change))
  93.             self._SongTracker__to_change.clear()
  94.             self._SongTracker__change_id = None
  95.  
  96.         self._SongTracker__change_id = GLib.idle_add(idle_change, priority = GLib.PRIORITY_LOW)
  97.  
  98.     
  99.     def __start(self, player, song, librarian):
  100.         self.elapsed = 0
  101.         if song is not None:
  102.             if song.multisong:
  103.                 song['~#lastplayed'] = int(time.time())
  104.                 song['~#playcount'] = song.get('~#playcount', 0) + 1
  105.             else:
  106.                 config.set('memory', 'song', song['~filename'])
  107.             song['~#laststarted'] = int(time.time())
  108.             self._SongTracker__changed(librarian, song)
  109.         else:
  110.             config.set('memory', 'song', '')
  111.  
  112.     
  113.     def __end(self, player, song, ended, librarian, pl):
  114.         if song is not None and not (song.multisong):
  115.             if ended:
  116.                 config.set('memory', 'seek', player.get_position())
  117.             else:
  118.                 config.set('memory', 'seek', 0)
  119.             if self.elapsed > 0.5 * song.get('~#length', 1):
  120.                 song['~#lastplayed'] = int(time.time())
  121.                 song['~#playcount'] = song.get('~#playcount', 0) + 1
  122.                 self._SongTracker__changed(librarian, song)
  123.             elif pl.current is not song:
  124.                 if not player.error:
  125.                     song['~#skipcount'] = song.get('~#skipcount', 0) + 1
  126.                     self._SongTracker__changed(librarian, song)
  127.                 
  128.             
  129.         else:
  130.             config.set('memory', 'seek', 0)
  131.  
  132.     
  133.     def __timer(self, timer):
  134.         self.elapsed += 1
  135.  
  136.  
  137.  
  138. class FSInterface(object):
  139.     '''Provides a file in ~/.quodlibet to indicate what song is playing.'''
  140.     
  141.     def __init__(self, player):
  142.         self._player = player
  143.         self._ids = [
  144.             player.connect('song-started', self._FSInterface__started),
  145.             player.connect('song-ended', self._FSInterface__ended)]
  146.  
  147.     
  148.     def destroy(self):
  149.         for id_ in self._ids:
  150.             self._player.disconnect(id_)
  151.         
  152.         
  153.         try:
  154.             os.unlink(const.CURRENT)
  155.         except EnvironmentError:
  156.             pass
  157.  
  158.  
  159.     
  160.     def __started(self, player, song):
  161.         if song:
  162.             
  163.             try:
  164.                 f = file(const.CURRENT, 'w')
  165.             except EnvironmentError:
  166.                 pass
  167.  
  168.             f.write(song.to_dump())
  169.             f.close()
  170.  
  171.     
  172.     def __ended(self, player, song, stopped):
  173.         
  174.         try:
  175.             os.unlink(const.CURRENT)
  176.         except EnvironmentError:
  177.             pass
  178.  
  179.  
  180.  
  181.